using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestImport.View.BeherenBestanden
{
    public partial class Prijzen : TestImport.View.BeherenBestanden.SuperBoeken
    {
        private DataGridViewCellStyle dataGridViewCellPrijsVeranderd;
        private bool isInBoekLijst = false;
        private DataTable dtItems;

        public Prijzen(bool isInBoekLijst)
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
            dataGridViewCellPrijsVeranderd = new DataGridViewCellStyle();
            dataGridViewCellPrijsVeranderd.ForeColor = System.Drawing.Color.DeepPink;
            this.boekBindingNavigator.BindingSource = this.boekBindingSource;
            this.Text = "Prijzen Beheer";
            this.isInBoekLijst = isInBoekLijst;
        }

        private void Prijzen_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Boeksoort' table. You can move, or remove it, as needed.
            this.boeksoortTableAdapter.Fill(this.onsBoekenPakketDataSet.Boeksoort);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Boek' table. You can move, or remove it, as needed.
            if (isInBoekLijst)
            {
                Text = "Prijsbeheer artikels UIT BOEKENLIJSTEN";
                this.boekTableAdapter.FillByIsUitBoeklijst(this.onsBoekenPakketDataSet.Boek);
                dtItems = this.boeklijst_BoekTableAdapter.GetData();
            }
            else
            {
                Text = "Prijsbeheer ALLE artikels";
                this.boekTableAdapter.Fill(this.onsBoekenPakketDataSet.Boek);
            }
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.BoekStatus' table. You can move, or remove it, as needed.
            this.boekStatusTableAdapter.Fill(this.onsBoekenPakketDataSet.BoekStatus);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Uitgever' table. You can move, or remove it, as needed.
            this.uitgeverTableAdapter.Fill(this.onsBoekenPakketDataSet.Uitgever);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Categorie' table. You can move, or remove it, as needed.
            this.categorieTableAdapter.Fill(this.onsBoekenPakketDataSet.Categorie);

            instellenPrijsParameters();
            this.WindowState = FormWindowState.Maximized;
        }

        protected override void txtBegin_TextChanged(object sender, EventArgs e)
        {
            base.txtBegin_TextChanged( sender,  e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void  cmbCategorieZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbCategorieZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbUitgeverZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbUitgeverZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbStatusZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbStatusZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbBoeksoortZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbBoeksoortZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtSchool_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtSchool_CheckedChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtPlato_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtPlato_CheckedChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtAlle_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtAlle_CheckedChanged(sender, e);
            this.boekBindingSource.RemoveFilter();
        }

        protected override void btnFilterSamen_Click(object sender, EventArgs e)
        {
            base.btnFilterSamen_Click(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        private void boekDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (this.boekDataGridView.Columns[e.ColumnIndex].Name == "dataGridViewAankoopPrijs" ||
                   this.boekDataGridView.Columns[e.ColumnIndex].Name == "dataGridViewSchoolPrijs" ||
                   this.boekDataGridView.Columns[e.ColumnIndex].Name == "dataGridViewHuurPrijs")
                {
                    this.boekDataGridView.CurrentRow.Cells["prijsVeranderd"].Value = true;
                    //this.boekDataGridView.CurrentRow.Cells["dgvWinstPercent"].Value=55;
                   
                }
            }
            catch (Exception ex) { ;}
        }

        private void boekDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                txtBoekFiche.Text = BoekFiche.getBoekFiche(this.boekDataGridView.CurrentRow.Cells["dataGridViewTitel"].Value.ToString(),
                                                           this.boekDataGridView.CurrentRow.Cells["dataGridViewIsbn"].Value.ToString(),
                                                           this.boekDataGridView.CurrentRow.Cells["dataGridViewUitgever"].FormattedValue.ToString(),
                                                           this.boekDataGridView.CurrentRow.Cells["dataGridViewCategorie"].FormattedValue.ToString(),
                                                           this.boekDataGridView.CurrentRow.Cells["dataGridViewBoekStatus"].FormattedValue.ToString(),
                                                           this.boekDataGridView.CurrentRow.Cells["dataGridViewBoeksoort"].FormattedValue.ToString());
            }
            catch (Exception ex) { ;}
        }

        private void boekDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            // Dummy
        }

        private void btnSchoolPrijs1Artikel_Click(object sender, EventArgs e)
        {
            try
            {
                double percent = 0.0;
                bool gelukt = true;
                double schoolPrijs = 0.0;
                double aankoopPrijs = double.Parse(this.boekDataGridView.CurrentRow.Cells["dataGridViewAankoopprijs"].Value.ToString());
                if (rbtMeerprijs.Checked) gelukt = double.TryParse(txtPercentPlus.Text, out percent);
                if (rbtMinprijs.Checked) gelukt = double.TryParse(txtPercentMin.Text, out percent);
                if (gelukt)
                {
                    if (rbtGelijkprijs.Checked) schoolPrijs = aankoopPrijs;
                    if (rbtMinprijs.Checked) schoolPrijs = aankoopPrijs * (1 - percent / 100.0);
                    if (rbtMeerprijs.Checked) schoolPrijs = aankoopPrijs * (1 + percent / 100.0);
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewSchoolprijs"].Value = afronden(schoolPrijs);
                    this.boekDataGridView.CurrentRow.Cells["prijsVeranderd"].Value = true;
                }
            }
            catch (Exception ex) { ;}
        }

        private void btnSchoolprijsAlleArtikelen_Click(object sender, EventArgs e)
        {
            int aantal = boekBindingSource.Count;
            String boodschap = "Schoolprijs herrekenen voor de " + aantal + " gefilterde artikels: MEERPRIJS van " + txtPercentPlus.Text + " Afronden:" + cmbAfronden.Text;
            DialogResult result = DialogResult.No;
            result = MessageBox.Show(boodschap, "Herbereken schoolprijs gefilterde artikels", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (result == DialogResult.Yes)
            {
            progressBar.Value = 0;
            progressBar.Minimum = 0;
            progressBar.Maximum = aantal;
            progressBar.Visible = true;
            boekBindingSource.MoveFirst();
            for (int i = 0; i < aantal; i++)
            {
                btnSchoolPrijs1Artikel_Click(sender, e);
                progressBar.Value++;
                boekBindingSource.MoveNext();
            }
            progressBar.Visible = false;
            }
         }

        private void btnHuurprijs1Artikel_Click(object sender, EventArgs e)
        {
            try
            {
                double percent = 0.0; 
                bool gelukt = true;
                double huurPrijs = 0.0;
                double aankoopPrijs = double.Parse(this.boekDataGridView.CurrentRow.Cells["dataGridViewAankoopprijs"].Value.ToString());
                gelukt = double.TryParse(txtPercentHuur.Text, out percent);
                if (gelukt)
                {
                    huurPrijs = aankoopPrijs * (percent / 100.0);
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewHuurprijs"].Value = afronden(huurPrijs);
                    this.boekDataGridView.CurrentRow.Cells["prijsVeranderd"].Value = true;
                    //this.boekDataGridView.CurrentRow.Cells["dataGridViewTitel"].Style = dataGridViewCellPrijsVeranderd;
                }
            }
            catch (Exception ex) { ;}
        }

       
        private void btnHuurprijsAlleArtikelen_Click(object sender, EventArgs e)
        {
            int aantal = boekBindingSource.Count;
            String boodschap = "Huurprijs herrekenen voor de " + aantal + " gefilterde artikels: HHURPRIJS van " + txtPercentPlus.Text + "% Afronden:" + cmbAfronden.Text;
            DialogResult result = DialogResult.No;
            result = MessageBox.Show(boodschap, "Herbereken huurprijs gefilterde artikels", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (result == DialogResult.Yes)
            {
                boekBindingSource.MoveFirst();
                for (int i = 0; i < aantal; i++)
                {
                    btnHuurprijs1Artikel_Click(sender, e);
                    boekBindingSource.MoveNext();
                }
            }
        }

        private double afronden(double bedrag)
        {
            int keuze = cmbAfronden.SelectedIndex;
            double terug = bedrag;
            if (bedrag > 0.0001 && keuze > 0)
            {
                int bedragI = (int)(Math.Round(bedrag, 2) * 100);
                int deel1 = bedragI / 100;
                int deel2 = bedragI % 100;
                int cijfer1 = deel2 / 10;
                int cijfer2 = deel2 % 10;
                //this.Text = deel1 + "  " + deel2 + "   " + cijfer1 + "   " + cijfer2;
                switch (keuze)
                {   //afronden op 5 cent
                    case 1: if (cijfer2 != 0 && cijfer2 != 5)
                        {
                            if (cijfer2 < 5) deel2 = cijfer1 * 10 + 5;
                            else deel2 = cijfer1 * 10 + 10;
                        }
                        break;
                    //afronden op 10 cent
                    case 2: if (cijfer2 != 0 )
                        {
                            deel2 = cijfer1 * 10 + 10;
                        }
                        break;
                    //afronden op 50 cent
                    case 3: if (deel2 != 0 && deel2 != 50)
                        {
                            if (deel2 < 50) deel2 = 50;
                            else deel2 = 100;
                        }
                        break;
                    //afronden op Euro
                    case 4: if (deel2 != 0)
                        {
                            deel2 = 100;
                        }
                        break;
                }
                terug = deel1 + (deel2 / 100.0);

            }
            return terug;

        }

        private void rbtMeerprijs_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtMeerprijs.Checked) txtPercentPlus.Enabled = true;
            else                      txtPercentPlus.Enabled = false;
                        
        }

        private void rbtMinprijs_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtMinprijs.Checked) txtPercentMin.Enabled = true;
            else txtPercentMin.Enabled = false;
        }

      
        private void boekDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            bool formateer = false;
            if (this.boekDataGridView.Columns[e.ColumnIndex].Name == "dataGridViewTitel")
            {
                if (e.Value != null)
                {
                    try
                    {
                        int rij = e.RowIndex;
                        if (boekDataGridView.Rows[rij].Cells["prijsVeranderd"].Value.ToString().Equals("True"))
                        {
                        
                            formateer = true;
                        }
                        if (formateer)
                        {
                            e.FormattingApplied = true;
                            e.CellStyle.BackColor = Color.Pink;
                            e.CellStyle.ForeColor = System.Drawing.Color.DeepPink;
                        }
                    }
                    catch (Exception ex) { }
                }
            }
        }

        private void instellenPrijsParameters()
        {
            this.rbtGelijkprijs.Checked = true;
            txtPercentPlus.Enabled = false;
            txtPercentMin.Enabled = false;
            if (InstParameters.Default.SoortWaarde.IndexOf('+') != -1)
            {
                rbtMeerprijs.Checked = true;
                txtPercentPlus.Text = InstParameters.Default.Percentage;
            }
            if (InstParameters.Default.SoortWaarde.IndexOf('-') != -1)
            {
                rbtMinprijs.Checked = true;
                txtPercentMin.Text = InstParameters.Default.Percentage;
            }
            txtPercentHuur.Text = InstParameters.Default.PercentageHuur;
            this.cmbAfronden.Text = InstParameters.Default.Afronding;
            progressBar.Value = 0;
            progressBar.Minimum = 0;
            progressBar.Visible = false;
        }

        private void btnRegistreerPrijsParameters_Click(object sender, EventArgs e)
        {
            InstParameters.Default.Afronding = this.cmbAfronden.Text;
            InstParameters.Default.PercentageHuur = txtPercentHuur.Text;
            if (rbtAlle.Checked)
            {
                InstParameters.Default.SoortWaarde =" Schoolprijs = aankoopprijs";
            }
            if (rbtMeerprijs.Checked)
            {
                InstParameters.Default.SoortWaarde ="Schoolprijs = aankoopprijs + %";
                InstParameters.Default.Percentage = txtPercentPlus.Text;
            } 
            if (rbtMinprijs.Checked)
            {
                InstParameters.Default.SoortWaarde = "Schoolprijs = aankoopprijs - %";
                InstParameters.Default.Percentage = txtPercentMin.Text; 
            } 
            InstParameters.Default.Save();

        }

        private void registreerPrijsUpdates()
        {
            this.boekTableAdapter.Update(this.onsBoekenPakketDataSet.Boek);
            
        }

        private void btnRegistreerPrijsUpdates_Click(object sender, EventArgs e)
        {
            this.boekBindingSource.Filter = "prijsVeranderd = true";
            int aantal = boekBindingSource.Count;
            if (aantal > 0)
            {
                String boodschap = "Prijsupdates registreren in databank";
                DialogResult result = DialogResult.No;
                result = MessageBox.Show(boodschap, "Registreren prijsudates", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.Yes)
                {
                    registreerPrijsUpdates();
                  
                }
            }
            this.boekBindingSource.RemoveFilter();
            gbFilter.Text = "Alle artikels";
        }

        private void Prijzen_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.boekBindingSource.Filter = "prijsVeranderd = true";
            int aantal = boekBindingSource.Count;
            if (aantal > 0)
            {
                String boodschap = "Prijsupdates registreren in databank";
                DialogResult result = DialogResult.No;
                result = MessageBox.Show(boodschap, "Registreren prijsudates", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.Yes)
                {
                    registreerPrijsUpdates();
                }
            }
        }

        private void btnToonPrijsverschillen_Click(object sender, EventArgs e)
        {
            DataView dv = boekBindingSource.List as DataView;
            dv.Sort = "boekID";
            onsBoekenPakketDataSet.Prijsverschillen.Clear();
            
            string t = "";
            decimal koopPrijsOud = 0;
            decimal koopPrijsNieuw = 0;
            decimal huurPrijsOud = 0;
            decimal huurPrijsNieuw = 0;
            bool huur = false;
            int boekID = 0;
            int boeklijstItemID = 0;
            int index = 0;
            foreach (DataRow dr in dtItems.Rows)
            {
                boekID = int.Parse(dr["boekID"].ToString());
                index = dv.Find(boekID);
                if (index > 0)
                {
                    //t += "Bingo";
                    koopPrijsNieuw = 0;
                    try { koopPrijsNieuw = decimal.Parse(dv[index]["schoolPrijs"].ToString()); }
                    catch (Exception) { };
                    huurPrijsNieuw = 0;
                    try { huurPrijsNieuw = decimal.Parse(dv[index]["huurPrijs"].ToString()); }
                    catch (Exception) { };
                }
                koopPrijsOud = 0;
                try { koopPrijsOud = decimal.Parse(dr["schoolPrijs"].ToString()); }
                catch (Exception) { };
                
                huurPrijsOud = 0;
                try { huurPrijsOud = decimal.Parse(dr["huurPrijs"].ToString()); }
                catch (Exception) { };
                
                huur = false;
                try { huur = bool.Parse(dr["huurBoek"].ToString()); }
                catch (Exception) { };
               
                boeklijstItemID = int.Parse(dr["boeklijstItemID"].ToString());
                //t += dr["titel"] + "\n";
                if ((huur && huurPrijsNieuw != huurPrijsOud)|| (!huur && koopPrijsNieuw != koopPrijsOud))
                    onsBoekenPakketDataSet.Prijsverschillen.AddPrijsverschillenRow(boeklijstItemID,dr["titel"].ToString(),huur,dr["groepCode"].ToString(),koopPrijsOud,koopPrijsNieuw,huurPrijsOud,huurPrijsNieuw,true);
            }
           // t+= onsBoekenPakketDataSet.Prijsverschillen.Rows.Count+" bbb"+"\n";   
           // MessageBox.Show(t);
            PrijsVerschillen f = new PrijsVerschillen(onsBoekenPakketDataSet.Prijsverschillen);
            f.ShowDialog();

        }

        
       
       
    }
}

